package ar.edu.utn.frba.dds.opendesigners;

import java.util.ArrayList;
import java.util.List;
import ar.edu.utn.frba.dds.opendesigners.aerolineas.AerolineaAdapter;
import ar.edu.utn.frba.dds.opendesigners.escalas.BuscadorEscalas;
import ar.edu.utn.frba.dds.opendesigners.resultados.ResultadoBusqueda;


public class AgenteDeViaje {
	
	private List<AerolineaAdapter> aerolineas;
	private static final AgenteDeViaje instance = new AgenteDeViaje();
	private Integer maxEscalas = 2;
	
	public AgenteDeViaje() {
		this.aerolineas = new ArrayList<AerolineaAdapter>();
	}
	
	public static AgenteDeViaje getInstance(){
		return instance;
	}

	public void agregarAerolinea(AerolineaAdapter aerolinea){
		this.aerolineas.add(aerolinea);
	}
	
	public ResultadoBusqueda buscar(ParametroBusqueda parametro){
		ResultadoBusqueda result = new ResultadoBusqueda();
		
		//Simil foreach en otros lenguajes
		//Hago la consulta a cada aerolinea disponible y guardo los datos retornados.
		for(AerolineaAdapter aerolinea : this.aerolineas){
			result.agregarResultadoBusqueda(aerolinea.buscar(parametro));
		}
		
		//Solo si me lo piden, armo escalas tambien
		if (parametro.getIncluyeVuelosConEscalas()){
			//Para cada aerolinea, busco escalas posibles
			for(AerolineaAdapter aerolinea : this.aerolineas){
				ResultadoBusqueda resultadoParcial = BuscadorEscalas.Buscar(parametro, aerolinea, maxEscalas);
				result.agregarResultadoBusqueda(resultadoParcial);
			}
		}
		return result;
	}

	public void limpiarAerolineas() {
		this.aerolineas.clear();
	}
	
}
